package server;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.SocketException;
import java.util.Observable;

/**
 * Deze klasse leest voortdurend wat er over de Socket wordt doorgestuurd.
 * Geeft dit nadien door aan het domain.
 * Implementeert dus de Runnable Interface!
 * @author David Covemaeker, Maarten Minnebo, Tim Van Thuyne, Toon Kint
 */

public class ServerReader extends Observable implements Runnable
{
	BufferedReader bufferedReader;

	/**
	 * De constructor haalt met de BufferedReader alle input op, van wat zich op de Socket begeeft.
	 * @param socket De Socket die de serverReader moet controleren
	 */
	public ServerReader(Socket socket) 
	{
		try
		{
			bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		}
		catch(IOException e)
		{
			e.printStackTrace();
		}
	}

	/**
	 * Dit is de run methode van de Runnable Interface.
	 * Deze methode wordt voortdurend als een aparte Thread uitgevoerd.
	 * Ze blijft met een lus de BufferedReader lezen en bij succes wordt de IRCController verwittigd d.m.v. de update methode van de Observer.
	 */
	@Override
	public void run()
	{
		try
		{
			String line = null;
		
			while((line = bufferedReader.readLine()) != null)
			{
				System.out.println(line);
				setChanged();
				notifyObservers(line);
			}
		}
		catch (SocketException se)
		{
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}

}
